
libname local '/data';
    
OPTIONS LINESIZE=79;



DATA interestrate04; SET local.cleantrade04 (IN=INA);

LENGTH A1-A8 E1 E3 E4 M0 M3 M4 M5 INT 8. M2 $1.;
M3=0;
INT=.;
IF SUBSTR(COLLFLD,1,3) EQ 'BAL' THEN DO;
    A1=SUBSTR(COLLFLD,24,1);
    A2=SUBSTR(COLLFLD,25,1);
    A3=SUBSTR(COLLFLD,26,1);
    A4=SUBSTR(COLLFLD,27,1);
    A5=SUBSTR(COLLFLD,28,1);
    A6=SUBSTR(COLLFLD,29,1);
    A7=SUBSTR(COLLFLD,30,1);
    A8=SUBSTR(COLLFLD,31,1);
    E4=.;
    IF A1 GE 0 THEN DO; E4=A1;
       IF A2 GE 0 THEN DO; E4=E4*10+A2;
          IF A3 GE 0 THEN DO; E4=E4*10+A3;
             IF A4 GE 0 THEN DO; E4=E4*10+A4;
                IF A5 GE 0 THEN DO; E4=E4*10+A5;
                   IF A6 GE 0 THEN DO; E4=E4*10+A6;
                      IF A7 GE 0 THEN DO; E4=E4*10+A7;
                         IF A8 GE 0 THEN E4=E4*10+A8;
                      END;
                   END;
                END;
             END;
          END;
       END;
    END;
    M4=SUBSTR(COLLFLD,14,2);
    M5=SUBSTR(COLLFLD,18,4);
    M3=1;
END;
M0=.;
IF SUBSTR(TERMS,1,1) EQ 'Z' OR TERMS EQ '' THEN M0=0;
   ELSE IF SUBSTR(TERMS,1,3) EQ 'MIN' THEN DO;
       A1=SUBSTR(TERMS,4,1);
       A2=SUBSTR(TERMS,5,1);
       A3=SUBSTR(TERMS,6,1);
       A4=SUBSTR(TERMS,7,1);
       A5=SUBSTR(TERMS,8,1);
       E1=.;
       M2='M';
       E3=.;
       IF A1 GE 0 THEN DO; E3=A1;
          IF A2 GE 0 THEN DO; E3=E3*10+A2;
             IF A3 GE 0 THEN DO; E3=E3*10+A3;
                IF A4 GE 0 THEN DO; E3=E3*10+A4;
                   IF A5 GE 0 THEN E3=E3*10+A5;
                END;
             END;
          END;
       END;
       M0=1;
   END;
   ELSE IF SUBSTR(TERMS,1,1) EQ 'M' THEN DO;
       A1=SUBSTR(TERMS,2,1);
       A2=SUBSTR(TERMS,3,1);
       A3=SUBSTR(TERMS,4,1);
       A4=SUBSTR(TERMS,5,1);
       A5=SUBSTR(TERMS,6,1);
       A6=SUBSTR(TERMS,7,1);
       A7=SUBSTR(TERMS,8,1);
       E1=.;
       M2='M';
       E3=.;
       IF A1 GE 0 THEN DO; E3=A1;
          IF A2 GE 0 THEN DO; E3=E3*10+A2;
             IF A3 GE 0 THEN DO; E3=E3*10+A3;
                IF A4 GE 0 THEN DO; E3=E3*10+A4;
                   IF A5 GE 0 THEN DO; E3=E3*10+A5;
                      IF A6 GE 0 THEN DO; E3=E3*10+A6;
                         IF A7 GE 0 THEN E3=E3*10+A7;
                      END;
                   END;
                END;
             END;
          END;
       END;
       M0=2;
   END;
   ELSE IF SUBSTR(TERMS,1,1) IN ('1','2','3','4','5','6','7','8','9','0'
      ) THEN DO;
       A1=SUBSTR(TERMS,1,1);
       A2=SUBSTR(TERMS,2,1);
       A3=SUBSTR(TERMS,3,1);
       A4=SUBSTR(TERMS,4,1);
       A5=SUBSTR(TERMS,5,1);
       A6=SUBSTR(TERMS,6,1);
       A7=SUBSTR(TERMS,7,1);
       A8=SUBSTR(TERMS,8,1);
       E1=.;
       E3=.;
       M2='%';
       M0=3;
       IF A1 GE 0 THEN DO; E1=A1; II=1;
          IF A2 GE 0 THEN DO; E1=E1*10+A2; II=2;
             IF A3 GE 0 THEN DO; E1=E1*10+A3; II=3;
                IF A4 GE 0 THEN DO; E1=E1*10+A4; II=4;
                   IF A5 GE 0 THEN DO; E1=E1*10+A5; II=5;
                      IF A6 GE 0 THEN DO; E1=E1*10+A6; II=6;
                         IF A6 GE 0 THEN DO; E1=E1*10+A7; II=7;
                            IF A7 GE 0 THEN DO; E1=E1*10+A8; II=8; END;
                         END;
                      END;
                   END;
                END;
             END;
          END;
       END;
       IF II NE 8 THEN DO; M2=SUBSTR(TERMS,II+1,1); M0=4;
       IF II LT 7 THEN DO;
       IF SUBSTR(TERMS,II+2,1) IN
          ('1','2','3','4','5','6','7','8','9','0') THEN DO;
          M0=5;
          A1=SUBSTR(TERMS,II+2,1);
          IF II LT 6 THEN A2=SUBSTR(TERMS,II+3,1); ELSE A2=.;
          IF II LT 5 THEN A3=SUBSTR(TERMS,II+4,1); ELSE A3=.;
          IF II LT 4 THEN A4=SUBSTR(TERMS,II+5,1); ELSE A4=.;
          IF II LT 3 THEN A5=SUBSTR(TERMS,II+6,1); ELSE A5=.;
          IF II LT 2 THEN A6=SUBSTR(TERMS,II+7,1); ELSE A6=.;
          IF A1 GE 0 THEN DO; E3=A1;
             IF A2 GE 0 THEN DO; E3=E3*10+A2;
                IF A3 GE 0 THEN DO; E3=E3*10+A3;
                   IF A4 GE 0 THEN DO; E3=E3*10+A4;
                      IF A5 GE 0 THEN DO; E3=E3*10+A5;
                         IF A6 GE 0 THEN E3=E3*10+A6;
                      END;
                   END;
                END;
             END;
          END;
          IF (E1 GT 0 AND E3 GT 0 AND M2 EQ 'M' AND M3 GT 0 AND M5 GT 0
             AND (M5-2003)*12+12 LT E1) OR
            (E1 GT 0 AND E3 GT 0 AND M2 EQ 'M' AND HICREDIT GT 0 AND M3
             EQ 0) THEN DO;
             GOAT=1;
             IF E1 GT 1000 THEN E1=INT(E1/10+.5);
             IF E1*E3 GT 103*HICREDIT THEN E3=E3/100;
             IF ABS(E1*E3-HICREDIT) LT MAX(5,MIN(360,E1)) THEN INT=0;
             ELSE DO;
             EW=.40;
             VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12));
             EW=.0001;
             VA1=E3*((1-1/(1.+EW/12)**E1)/(EW/12));
             IF HICREDIT GT VA2 AND HICREDIT LT VA1 THEN DO;
             DO I=1 TO 40;
                EW=EW+.01;
                VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12));
                IF HICREDIT GE VA2 AND HICREDIT LE VA1 THEN DO;
                   EW=EW-.01;
                   DO J=1 TO 100;
                      EW=EW+.0001;
                      VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12));
                      IF HICREDIT GE VA2 AND HICREDIT LE VA1 THEN DO;
                         INT=100*EW;
                         GO TO AA;
                      END;
                      VA1=VA2;
                   END;
                   INT=100*EW;
                   GO TO AA;
                END;
                VA1=VA2;
             END;
             AA: END;
             END;
          END;
          ELSE IF E1 GT 0 AND E3 GT 0 AND M2 EQ 'M' AND HICREDIT GT 0
             AND M3 EQ 1 THEN DO;
             EW=.40;
             VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12))+E4/((1.+EW/12)**E1);
             EW=.0001;
             VA1=E3*((1-1/(1.+EW/12)**E1)/(EW/12))+E4/((1.+EW/12)**E1);
             IF HICREDIT GT VA2 AND HICREDIT LT VA1 THEN DO;
             DO I=1 TO 40;
                EW=EW+.01;
              VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12))+E4/((1.+EW/12)**E1);
                IF HICREDIT GE VA2 AND HICREDIT LE VA1 THEN DO;
                   EW=EW-.01;
                   DO J=1 TO 100;
                      EW=EW+.0001;
              VA2=E3*((1-1/(1.+EW/12)**E1)/(EW/12))+E4/((1.+EW/12)**E1);
                      IF HICREDIT GE VA2 AND HICREDIT LE VA1 THEN DO;
                         INT=100*EW;
                         GO TO BB;
                      END;
                      VA1=VA2;
                   END;
                   INT=100*EW;
                   GO TO BB;
                END;
                VA1=VA2;
             END;
             BB: END;
          END;
       END;
       END;
       END;
    END;

run;


Data local.interestrate04;
set interestrate04;
drop A1 A2 A3 A4 A5 A6 A7 A8 E1 E3 E4 M0 M1 M2 M3 M4 M5 EW VA1 VA2 II GOAT I J;
run;
